package com.io;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class Text5 {
    public static void main(String[] args) throws FileNotFoundException {
        /**
         * 完成简易记事本工具。程序启动后将用户输入的每一行字符串都按行写入到note.txt中当用户单独输入exit时退出。
         * 选做:程序启动后可以要求用先输入一个文件名，然后对该文件写操作
         */

        /**
         * 以下是各个流对象在代码中所起的作用：
         *
         *
         * FileOutputStream fos = new FileOutputStream(string + ".txt", true);
         * 作用：创建一个FileOutputStream对象，用于将数据以字节流的形式写入到指定的文件中。
         * 这里通过字符串拼接(string + ".txt")生成目标文件名。
         * 参数说明：
         * string + ".txt"：指定要写入的文件名，由变量string与扩展名.txt组成。
         * true：表示以追加模式（APPEND_MODE）打开文件。如果文件已存在，新的数据将被添加到文件末尾，而不是覆盖原有内容。
         * 如果文件不存在，将创建新文件。
         *
         *
         * OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
         * 作用：创建一个OutputStreamWriter对象，它作为桥梁，将字符流（以Unicode编码的字符）转换为字节流（实际写入文件的二进制数据），并与前面创建的FileOutputStream对象关联。
         * 参数说明：
         * fos：传入前面创建的FileOutputStream对象，指定数据的实际输出目的地。
         * StandardCharsets.UTF_8：指定字符编码为UTF-8。这意味着在将字符转换为字节写入文件时，会使用UTF-8编码格式。
         * 这确保了文本数据在不同系统和平台上具有良好的兼容性。
         *
         *
         * BufferedWriter bw = new BufferedWriter(osw);
         * 作用：创建一个BufferedWriter对象，它包装了OutputStreamWriter，提供缓冲功能。通过使用缓冲区，可以减少实际写入磁盘的操作次数，从而提高写入大量文本数据时的性能。
         * 参数说明：
         * osw：传入前面创建的OutputStreamWriter对象，BufferedWriter会通过它来处理字符到字节的转换并最终写入文件。
         *
         *
         * PrintWriter pw = new PrintWriter(bw);
         * 作用：创建一个PrintWriter对象，它进一步封装了BufferedWriter，提供了一组更为方便的方法来编写格式化的文本输出。这些方法包括print()、println()、printf()等，它们简化了输出字符串、数值、布尔值等不同类型数据的过程，并自动处理行结束符。
         * 参数说明：
         * bw：传入前面创建的BufferedWriter对象，PrintWriter的所有写入操作都将通过它来完成。
         * 综上所述，这段代码创建了一条从PrintWriter到FileOutputStream的流管道，用于以UTF-8编码、追加模式将文本数据高效地写入到指定文件中。开发者可以通过操作pw对象来轻松实现文本数据的写入，同时享受到缓冲和自动刷新带来的性能提升以及便捷的打印方法。
         */

        System.out.println("请输入文件名");
        Scanner scanner = new Scanner(System.in);
        String string = scanner.nextLine();

        FileOutputStream fos = new FileOutputStream(string + ".txt",true);
        OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
        BufferedWriter bw = new BufferedWriter(osw);
        PrintWriter pw = new PrintWriter(bw,true);

        while (true) {
            System.out.println("请输入内容,输入exit退出");
            String string1 = scanner.nextLine();
            if ("exit".equals(string1)) {
                System.out.println("退出");
                break;
            }
            pw.println(string1);
        }
        pw.close();
    }
}
